package main

import "fmt"

// 模拟实现继承

// 定义一个动物
type animal struct {
	name string
}

// 定义一个狗子
type dog struct {
	age    int
	animal animal
}

// 动物的方法
func (a animal) move() {
	fmt.Printf("%s在动~\n", a.name)
}

// 狗子的方法
func (d dog) wang() {
	fmt.Printf("%s在叫~\n", d.animal)
}

// 狗子的构造函数
func newDog(age int, animal animal) dog {
	return dog{
		age:    age,
		animal: animal,
	}
}

// 继承方法	d.animal.move()
func main() {
	d1 := dog{
		age:    1,
		animal: animal{name: "傻狗子"},
	}
	d1.wang()
	d1.animal.move()

	d := newDog(1, animal{name: "da"})
	d.wang()
	d.animal.move()
}
